<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Title</title>
</head>
<body>

<script>
    function test1() {
        /* ******** 求前n项和 ******** */

        // 递归
        function fn(n) {
            if (n === 1) {
                return 1;
            }
            return n + fn(n - 1);
        }

        // 尾递归
        function innerf(a, n) {
            if (n === 1) {
                return a;
            }
            return innerf(n + a, n - 1);
        }

        function fn2(n) {
            return innerf(1, n);
        }

        console.log(fn(100));
        console.log(fn2(100));

        /* ******** 斐波那契数列 ******** */
        function fb(n) {
            if (n === 1 || n === 2) {
                return 1;
            }
            return fb(n - 1) + fb(n - 2);
        }

        let arr = [];
        for (let i = 0; i < 10; i++) {
            arr[i] = fb(i + 1);
        }
        console.log(arr);

        //
    }

    // 我们想要做输入id号,就可以返回的数据对象
    const data = [{
        id: 1,
        name: '家电',
        goods: [{
            id: 11,
            gname: '冰箱',
            goods: [{
                id: 111,
                gname: '海尔'
            }, {
                id: 112,
                gname: '美的'
            },]
        }, {
            id: 12,
            gname: '洗衣机'
        }]
    }, {
        id: 2,
        name: '服饰'
    }];

    function test2() {
        //1.利用 forEach 去遍历里面的每一个对象
        function getId(json, id) {
            let o = {};
            json.forEach(function (item) {
                // console.log(item); // 2个数组元素
                if (item.id === id) {
                    // console.log(item);
                    o = item;
                    return o;
                    // 2. 我们想要得里层的数据 11 12 可以利用递归函数
                    // 里面应该有goods这个数组并且数组的长度不为 0
                } else if (item.goods && item.goods.length > 0) {
                    o = getId(item.goods, id);
                }
            });
            return o;
        }

        function getDataById(json, id) {
            if (json && json.id === id) {
                return json;
            }
            if (json instanceof Array) {
                for (let i = 0; i < json.length; i++) {
                    const result = getDataById(json[i], id);
                    if (result && result.id === id) return result;
                }
            } else if (json.goods) {
                return getDataById(json.goods, id);
            }
            return null;
        }

        console.log(getDataById(data, 12));
        console.log(getId(data, 2));
    }

    test2();

</script>

</body>
</html>